import logging.handlers
import time


def init_log_config(filename, when="midnight", interval=1, backup_count=7):
    '''
    功能：初始化日志配置函数
    :param filename: 日志文件名
    :param when: 设定日志切分时间间隔的单位
    :param interval: 时间间隔单位的个数，指等待多少个when后继续进行日志记录
    :param backup_count: 最多保留日志文件的格式
    :return:
    '''

    # 1、创建【日志器对象】
    logger = logging.getLogger()

    # 2、设置【日志器对象】的打印级别
    logger.setLevel(logging.INFO)
    # logging.DEBUG 调试级别
    # logging.INFO 信息级别
    # logging.WARNNING 警告级别
    # logging.ERROR 错误级别
    # logging.CRITICAL 严重错误级别

    # 3.1、创建 输出到控制台 的对象---【控制台对象】
    to_console = logging.StreamHandler()
    # 3.2、创建 输出到日志文件 的对象---【日志文件对象】
    to_file = logging.handlers.TimedRotatingFileHandler(filename,
                                                        when=when, interval=interval, backupCount=backup_count,
                                                        encoding="utf-8")
    # when，字符串，指定日志切分间隔时间的单位，midnight：凌晨12点
    # interval，整型，是间隔时间单位的个数，指等待多少个when以后，继续进行日志记录。等于1的时候表示，每个凌晨12点记录一份log文件
    # backupCount，是保留文件的个数。如新增文件生成后超过这个数值，会把时间较老的log文件删掉

    # 4、创建日志信息格式
    fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d] - %(message)s"
    formatter = logging.Formatter(fmt)

    # 5.1、日志信息格式 设置给 【控制台对象】
    to_console.setFormatter(formatter)
    # 5.2、日志信息格式 设置给 【日志文件对象】
    to_file.setFormatter(formatter)

    # 6.1、给【日志器对象】 添加 【控制台对象】，这样日志就能在控制台打印出来
    logger.addHandler(to_console)
    # 6.2、给【日志器对象】 添加 【日志文件对象】，这样日志就能生成日志文件
    logger.addHandler(to_file)


if __name__ == "__main__":

    init_log_config("b.log")
    while True:
        logging.info("w1120000233ww")
        time.sleep(1)
